www.gusucode.com > matlab编程NSCT分解 图像融合 各个融合指标评价体系 分解源码程序 > matlab编程NSCT分解 图像融合 各个融合指标评价体系 分解源码程序/NSCT/NSCT.m
function [F]=NSCT(optical,sar); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Image decomposition by nonsubsampled contourlet transform (NSSC). % This is the iterated filter bank that computes the nonsubsampled % contourlet transform. %%%%%%%%%%%%%%%%%%%%%%%%%%%%参数选取%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Parameteters: nlevels = 4 ; % Decomposition level dfilter = 'pkva' ; % Pyramidal filter %dfilter = 'dmaxflat7'; %'cd' ; % Directional filter pfiltr= '9-7'; disp( nlevels); disp(dfilter);disp(pfiltr); % Nonsubsampled Contourlet decomposition %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%SAR图像分解%%%%%%%%%%%%%%%%%%%%%%%% %im=imread('4sar.bmp'); im=sar; im=double(im); %imvisible=imread('mvisible.tif'); imvisible=optical; imvisible=double(imvisible); I=1/3*imvisible(:,:,1)+1/3*imvisible(:,:,2)+1/3*imvisible(:,:,3); %im=(im-mean(im(:)))*std(I(:))/std(im(:)) + mean(I(:)); coeffsar = nsctdec( double(im), nlevels ,dfilter,pfiltr); sarlow=coeffsar{1}; sarhigh=coeffsar{2}; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%可见光图像分解%%%%%%%%%%%%%%%%%%%%%%% A=im2double(I); coeffvisible = nsctdec( double(A), nlevels ,dfilter,pfiltr); visiblelow=coeffvisible{1}; visiblehigh=coeffvisible{2}; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %融合规则:低频采用加权平均法,高频采用绝对值较大法 [m,n,s]=size(visiblehigh{1}); hp=cell(1,16); for i= 1 :16 for row=1:m for cloms=1:n if abs(sarhigh{i}(row,cloms)) >= abs(visiblehigh{i}(row,cloms)) hp{i}(row,cloms)=sarhigh{i}(row,cloms); else hp{i}(row,cloms)=visiblehigh{i}(row,cloms); end end end end a=0.9; b=0.1; lp=a.*(sarlow+visiblelow)+b.*(visiblelow-sarlow); coeffs=cell(1,2); coeffs{1}=lp; coeffs{2}=hp; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Nonsubsampled Contourlet transform (NSSC) reconstruction. % This is the inverse of nsscdec, i.e. % imrec = nsscrec(coeffs, dfilter, pfilter); % would reconstruct imrec = im %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Reconstruct image imrec = nsctrec( coeffs, dfilter, pfiltr ) ; %imrec=(imrec-mean(imrec(:)))*std(im(:))/std(imrec(:)) + mean(im(:)); im=(im-mean(im(:)))*std(imrec(:))/std(im(:)) + mean(imrec(:)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %产生融合图像 for i=1:3 F(:,:,i)=imvisible(:,:,i)+(im-imrec); end imwrite(F,'fusionNSCT.bmp')